// 写一些数据
let arr=[
    {
        id:1,
        name:"zs",
        sex:"女"
    },
    {
        id:2,
        name:"ls",
        sex:"男"
    }
]

// 写一些功能
function intro(obj){
    console.log(`我是${obj.name},我是${obj.sex}生`);
}



// 暴露数据和功能


// 一下子全部内容都暴露
module.exports={
    arr:arr,
    intro
}
// 能不能一个一个的暴露呢？
// module.exports.arr=arr
// module.exports.intro=intro
// module.exports.a=1

// exports.arr=arr
// exports.intro=intro
// exports.a=1





console.log(module.exports);
console.log(exports);


// node中： exports对module.exports 做了一个浅拷贝（一个内容改了，另一个也会改）
// 所以exports就是module.exports用来收集数据的工具
// exports收集数据的方式是：export.属性名=属性值 （只能用这种方式）

// 模块中向外部暴露的是：module.exports



// 因为 exports和module.exports 之间是浅拷贝，所以数据才会共享
// 而下面这两个行为： 都会让exports和module.exports的浅拷贝关系断掉

// exports={
//     arr,
//     intro,
//     a:1
// }

// module.exports={
//     arr:arr,
//     intro
// }


// 所以此时exports干了什么事,跟module.exports 没有任何关系
// 所以：exports只能采用： exports.属性名=属性值 （只能用这种方式，因为如果直接exports={} 那么exports就失效了）
// 如果采用了 module.exports={} ，则exports也同样失效


// ********************************
// 总结：一般情况下，两者不会同时出现，要么使用module.exports={}  ，要么使用 exports.属性名=属性值



// 在node的模块中，通过module.exports向外部暴露数据，而exports是node对module.exports做的一个浅拷贝，这样exports就可以作为辅助工具代替module.exports 去收集需要暴露的数据。但是因为是浅拷贝，所以两者任何一项的内存地址改变了，则exports的功能就会失效。所以一般情况下，两者不会同时出现，要么使用module.exports={}  暴露数据，要么使用 exports.属性名=属性值暴露数据








